package com.haier.npt.security.service;



import java.util.List;

import com.haier.npt.page.PageBean;
import com.haier.npt.security.domain.SysPermission;
import com.haier.npt.security.domain.SysRole;
import com.haier.npt.security.domain.SysRoleMemberRe;
import com.haier.npt.security.dto.SysRoleDTO;
import com.haier.npt.security.dto.SysRoleSystemDTO;


/**
 * @Description:角色服务 
 * @author: lixu
 * @date:   2018年7月13日 下午3:02:42   
 */
public interface SysRoleService {


    /**
     * @Description: 添加角色
     * @param: @param sysRole
     * @param: @return      
     * @return: Long      
     * @throws   
     */
    public Long addRole(SysRole sysRole);


    /**
     * @Description: 添加一个管理员角色
     * @param: @param sysRoleSystemDTO
     * @param: @return      
     * @return: Long      
     * @throws   
     */
    public Long addRoleSystem(SysRoleSystemDTO sysRoleSystemDTO);

    /**
     * @Description: 编辑角色名称
     * @param: @param roleId
     * @param: @param roleName
     * @param: @return      
     * @return: boolean      
     * @throws   
     */
    public boolean editRoleName(Long roleId, String roleName);


    /**
     * @Description: 给memberid 赋予多个角色
     * @param: @param memberId
     * @param: @param roleIds
     * @param: @return      
     * @return: boolean      
     * @throws   
     */
    public boolean addMemberRoles(Long memberId, Long roleIds[]);

    /**
     * @Description: 批量查询成员的角色列表
     * @param: @param memberIds
     * @param: @return      
     * @return: List<SysRoleDTO>      
     * @throws   
     */
    public List<SysRoleDTO> listMemberRoles(Long memberIds[]) ;

    /**
     * 根据角色编号查询此角色下的所有的成员
     *
     * @param roleId
     * @param pageSize 每页大小
     * @param pageNo   当期页
     * @return
     */
    public PageBean<SysRoleMemberRe> listMemberByRole(Long roleId, Integer pageSize, Integer pageNo);
    
    /**
     * @Description: 根据角色编号删除角色
     * @param: @param roleId
     * @param: @return      
     * @return: boolean      
     * @throws   
     */
    public boolean deleteRole(Long roleId);

    /**
     * @Description: 角色添加成员
     * @param: @param roleId
     * @param: @param memberIds
     * @param: @return      
     * @return: boolean      
     * @throws   
     */
    public boolean addRoleMember(Long roleId, Long memberIds[]) ;

    /**
     * @Description: 角色删除成员
     * @param: @param roleId
     * @param: @param memberIds
     * @param: @return      
     * @return: boolean      
     * @throws   
     */
    public boolean deleteRoleMember(Long roleId, Long memberIds[]) ;

    /**
     * @Description: 根据成员编号删除对应的角色关系
     * @param: @param memberIds
     * @param: @return      
     * @return: boolean      
     * @throws   
     */
    public boolean deleteRoleMembers(Long memberIds[]);

    /**
     * @Description: 角色添加权限
     * @param: @param roleId
     * @param: @param sysPermissions
     * @param: @return      
     * @return: boolean      
     * @throws   
     */
    public boolean addRolePermission(Long roleId, List<SysPermission> sysPermissions);
    
    /**
     * @Description: 角色添删除权限
     * @param: @param roleId
     * @param: @param permissionIds
     * @param: @return      
     * @return: boolean      
     * @throws   
     */
    public boolean deleteRolePermission(Long roleId, Long[] permissionIds);

    /**
     * @Description: 根据角色ID查询关联的权限ID
     * @param: @param roleId
     * @param: @return      
     * @return: List<Long>      
     * @throws   
     */
    public List<Long> listRolePermissionIds(Long roleId);

    /**
     * @Description: 根据权限ID查询对应的权限项信息
     * @param: @param listRolePermissionIds
     * @param: @return      
     * @return: List<SysPermission>      
     * @throws   
     */
    public List<SysPermission> listPermissions(List<Long> listRolePermissionIds);
    
    
    /**
     * @Description: 根据人员id列出所有权限项
     * @param: @param memberIds
     * @param: @return      
     * @return: List<SysPermission>      
     * @throws   
     */
    public List<SysPermission> listPermissionByMemberIds(List<Long> memberIds);
    
    /**
     * @Description: 根据角色ID集合查询角色集合
     * @param: @param roleIds
     * @param: @return      
     * @return: List<SysRole>      
     * @throws   
     */
    List<SysRole> getSysRolesByIds(List<Long> roleIds);

}
